// pages/films/player.js
let app=getApp() //获取小程序对象
let pp //获取列表页面对象
let videoContext //创建 video 上下文 VideoContext 对象
Page({
	data:{
		rateIndex: 2,
		rates: ['0.5', '0.8', '1.0','1.25', '1.5', '2.0', '3.0', '4.0'],
	},
	rates(e){ //点击倍速时触发
		let rateIndex=e.target.dataset.index //获取点击倍速的索引号
		this.setData({rateIndex}) //展现点击的效果
		let rate=this.data.rates[rateIndex] //获取点击的倍速
		videoContext.playbackRate(rate-0) //按指定的倍速进行播放
	},
	loadedmeta(e){ //视频元数据加载完成时触发
		console.log('视频元数据加载完成', e)
		let rateIndex=this.data.rateIndex //获取原来点击倍速的索引号
		let rate=this.data.rates[rateIndex] //获取点击的倍速
		videoContext.playbackRate(rate-0) //按指定的倍速进行播放
		let videoHeight=710*e.detail.height/e.detail.width //video组件应该的高度
		this.setData({videoHeight}) //调整video组件的高度
	},
	async play(e){ //点击剧集时进行播放
		let listIndex=e.target.dataset.index //点击剧集的索引号
		if(listIndex==null)return //没有点击到某个剧集上
		let sourceIndex=this.data.sourceIndex //当前源对象的索引号
		let change={playingSourceIndex:sourceIndex} //记录有变化的数据
		change[`sources[${sourceIndex}].listIndex`]=listIndex //记录点击剧集的索引号
		change[`sources[${sourceIndex}].list[${listIndex}].selected`]=true //该剧集处于选中的状态
		this.setData(change) //更新页面数据
		let source=this.data.sources[sourceIndex] //当前源对象
		let video=source.list[listIndex] //要播放的视频对象
		console.log(video);
		if(video.url.endsWith('.m3u8')){ //检测是否已有视频m3u8的地址
			this.setData({url: video.url}) //直接播放
			return
		}
		let url=`${pp.host}${video.url}` //某一集播放页面的地址
		let html=await app.request({url}) //获取播放页面的html文本
		console.log(html);
		let r, regex=/now="([^"]+)";var pn="[^"]+"; var next="([^"]*)"/
		if(r=regex.exec(html)){
			let change={url: r[1]} 
			change[`sources[${sourceIndex}].list[${listIndex}].url`]=r[1]
			if(r[2])change[`sources[${sourceIndex}].list[${listIndex+1}].url`]=r[2]
			this.setData(change)
		}
	},
	sources(e){ //点击视频源时执行的操作
		let sourceIndex=e.target.dataset.index //点击源的索引号
		if(sourceIndex==null)return //没有点击到某个源上
		let oldIndex=this.data.sourceIndex //原来点击源的索引号
		let change={sourceIndex} //记录有变化的数据
		if(oldIndex!=null)change[`sources[${oldIndex}].selected`]=false //取消原来的点击效果
		change[`sources[${sourceIndex}].selected`]=true //设置刚点击源的选择效果
		this.setData(change) //更新页面数据
	},
    async onLoad(options) {
		videoContext=wx.createVideoContext('myVideo')
		let index=parseInt(options.index) //要播放视频的索引号
		let pages=getCurrentPages() //获取当前页面栈。数组中第一个元素为首页，最后一个元素为当前页面。[main, films/index, films/player]
		pp=pages[pages.length-2] //获取列表页面对象
		console.log(pp.data) //列表页面的页面数据
		let menuIndex=pp.data.menuIndex //菜单索引号
		let menu=pp.data.menus[menuIndex] //当前菜单
		let type=menu.types[menu.typeIndex] //当前类型
		let video=type.list[index] //要播放的视频
		console.log(video)
		let url=`${pp.host}${video.url}` //https://www.gow64.com/yy/123003.html
		
		let html=await app.request({ url }) //获取视频播放页面的html文本
		//console.log(html);
		let r, jj='', regex=/video-info-content">(.+?)<\/div>/s //获取简介的正则表达式
		if(r=regex.exec(html)){
			jj='　　'+r[1].replace(/<\/?(p|div|br)[^>]*>|　+/g, '\n')
			.replace(/<[^>]*>/g,'')
			.replace(/&nbsp;/g, ' ')
			.replace(/\s*\n\s*/g, '\n　　')
		}
		let sources=[] //存储视频源的信息
		regex=/data-dropdown-value="([^"]+)/g //获取视频源的正则表达式
		while(r=regex.exec(html)){
			sources.push({
				name: r[1], //视频源的名称
			})
		}

		regex=/class="sort-item">(.+?)<\/div>/gs //获取多个子块(21集)的正则表达式
		let position=-1
		while(r=regex.exec(html)){
			//console.log(r[1]);
			let r2, list=[], reg=/title="([^"]+)" href="([^"]+)/g //获取每一集信息的正则表达式
			while(r2=reg.exec(r[1])){ //在子块中匹配每一集的信息
				list.push({
					name: r2[1], //每一集的名称
					url: r2[2], //每一集的超链接
				})
			}
			sources[++position].list=list //设置视频源的每一集的列表信息
		}
		this.setData({title: video.title, jj, sources })
    },
})